package pers.twf.twfRpc.registry;

import cn.hutool.core.collection.ConcurrentHashSet;
import pers.twf.twfRpc.config.RegistryConfig;
import pers.twf.twfRpc.model.ServiceMetaInfo;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 注册中心
 */
public interface Registry {
    /**
     * 注册中心服务缓存对象
     */
    final RegistryServiceCache registryServiceCache = new RegistryServiceCache();

    /**
     * 正在监听的key集合
     */
    final Set<String> watchKeySet = new ConcurrentHashSet<>();

    /**
     *
     */
    final Set<String> localRegisterNodeKeySet = new HashSet();


    /**
     * 心跳检测（服务端）
     */
    void heartBeat();



    /**
     * 消费端监听
     */
    void watch(String serviceNodeKey);

    /**
     * 初始化
     *
     * @param registryConfig
     */
    void init(RegistryConfig registryConfig);

    /**
     * 注册服务（服务端）
     *
     * @param serviceMetaInfo
     */
    void register(ServiceMetaInfo serviceMetaInfo) throws Exception;

    /**
     * 注销服务（服务端）
     *
     * @param serviceMetaInfo
     */
    void unRegister(ServiceMetaInfo serviceMetaInfo);

    /**
     * 服务发现（获取某服务的所有节点，消费端）
     *
     * @param serviceKey 服务键名
     * @return
     */
    List<ServiceMetaInfo> serviceDiscovery(String serviceKey);

    /**
     * 服务销毁
     */
    void destroy();
}
